/**
 * @file    test_main.h
 * @author  Giantec-Semi ATE
 * @brief   Test configuration header file
 * @version 0.1
 * 
 * @copyright Copyright (c) 2021 Giantec-Semi
 */

/** Define to prevent recursive inclusion */
#ifndef GT98XX_TEST_TEST_MAIN_H_
#define GT98XX_TEST_TEST_MAIN_H_

#ifdef __cplusplus
  extern "C" {
#endif /* __cplusplus */

// <<< Use Configuration Wizard in Context Menu >>>
//  <h> Test Modules Include
//      <e> UART
//          <c> UART Test 01
            //#define TEST_UART_01
//          </c>
//          <c> UART Test 02
            //#define TEST_UART_02
//          </c>
//          <c> UART Test 03
            //#define TEST_UART_03
//          </c>
//          <c> UART Test 04
            //#define TEST_UART_04
//          </c>
//          <c> UART Test 05
            //#define TEST_UART_05
//          </c>
//          <c> TEST UART ONCHIP 01
            //#define TEST_UART_ONCHIP_01
//          </c>
        #define TEST_UART 0
//      </e>
//      <e> SPI
//          <c> SPI Test 01
            //#define TEST_SPI_01
//          </c>
//          <c> SPI Test 02
            //#define TEST_SPI_02
//          </c>
//          <c> SPI Test 03
            //#define TEST_SPI_03
//          </c>
//          <c> SPI Test 04
            //#define TEST_SPI_04
//          </c>
        #define TEST_SPI 0
//      </e>
//      <e> I2C
//          <c> I2C Test 01
            //#define TEST_I2C_01
//          </c>
        #define TEST_I2C 1
//      </e>
//      <e> Timer
//          <c> Timer Test 01
            //#define TEST_TIMER_01
//          </c>
//          <c> Timer Test 02
            //#define TEST_TIMER_02
//          </c>
        #define TEST_TIMER 0
//      </e>
//      <e> IWDT
//          <c> IWDT Test 01
            //#define TEST_IWDT_01
//          </c>
        #define TEST_IWDT 0
//      </e>
//      <e> GPIO
//          <c> GPIO Test 01
            //#define TEST_GPIO_01
//          </c>
        #define TEST_GPIO 0
//      </e>
//  </h>
//  <c> Check command checksum
    //#define TEST_CHECKSUM
//  </c>
// <<< end of configuration section >>>

#include "infrastructure.h"


typedef struct tagCommandTypedef {
  uint8_t  buffer[256];
  uint32_t checksum;
  uint32_t data_length;
  uint8_t* ins;
  uint8_t* data;
} CommandTypedef;

typedef struct tagResponseTypedef {
  uint8_t  buffer[256];
  uint32_t error_id;
  uint32_t length;
} ResponseTypedef;

extern CommandTypedef  g_command;
extern ResponseTypedef g_response;

void ReceiveCommand(void);
void ReceiveUartData(uint8_t* buffer, uint32_t receive_length);
uint8_t DistributeCommand(void);
void ClearResponse(void);
void AddByteToResponse(const uint8_t data);
void AddWordToResponse(const uint32_t data);
void SendResponse(void);


void SmaSendData(uint32_t *buf,uint8_t ChannelNum);

void Delay(volatile uint32_t time);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* GT98XX_TEST_TEST_MAIN_H_ */
